package com.qtrue.exer;

/**
 * @Package: com.qtrue.exer
 * @ClassName: ArrayDemo04
 * @Author: xiaoBao
 * @CreateTime: 2022-03-06 10:54
 * @Description: 二维数组练习：杨辉三角
 *                  使用二维数组打印一个10行杨辉三角。
 *              1
 *              1 1
 *              1 2 1
 *              1 3 3 1
 *              1 4 6 4 1
 *              1 5 10 10 5 1
 *              1 6 15 20 15 6 1
 *              1 7 21 35 35 21 7 1
 *              1 8 28 56 70 56 28 8 1
 *              1 9 36 84 126 126 84 36 9 1
 *
 *          【提示】：
 *          1、第一行有1个元素，第n行有n个元素
 *          2、每一行的第一个元素和最后一个元素都是1
 *          3、从第三行开始，对于非第一个元素和最后一个元素的元素，即：
 *              yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
 */
public class ArrayDemo04 {
    public static void main(String[] args) {
        // 1. 声明并初始化二维数组
        int yangHui[][] = new int[10][];
        // 2. 给数组的元素赋值
        for(int i=0;i<yangHui.length;i++){
            // 2.1 声明第n个下标元素的二维数组长度为n+1（即实现第n行有n个元素）
            yangHui[i] = new int[i+1];

            // 2.2 给每行的首末元素赋值
            yangHui[i][0] = yangHui[i][i] = 1; // 合并赋值（即实现每行第1个元素和最后一个元素都是1）

            // 2.3 给每行的[非]首末元素赋值
            if(yangHui[i].length > 2){ // 当每行的长度大于2的时候
                for(int j=1;j<yangHui[i].length-1;j++){
                    yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
                }
            }

            // 3. 循环输出每个下标元素的二维数组
            for(int k=0;k<yangHui[i].length;k++){
                System.out.print(yangHui[i][k] + " ");
            }
            System.out.println("");
        }
    }


}
